In general, computer operating systems control the processing of tasks, the allocation of system memory among the tasks, the input/output to peripheral devices, and other system-level functions. A storage system, such as a file system, controls the formatting of data, maintaining the location of the data on persistent storage devices, a logical hierarchy of files, who is permitted to access what file, and other file-related tasks. File systems are frequently integral with the operating system such that although a logical distinction between the functionality of the two systems can be made, the two systems are in fact intertwined with one another from a source code stand point. Such an integral system makes modifying either the operating system or the file system difficult because modifications to either of the systems may unintentionally impact the other system. Consequently, extending the functionality of a file system which is integral with the operating system can be difficult to accomplish. In an attempt to overcome this problem, some operating systems, such as the Unix operating system, have been developed which have been modularized to the extent that they can, with relatively little modification, interact with different file systems. This has enabled third party developers to provide file systems for use with such operating systems.
One problem associated with conventional file systems is that they typically allow little flexibility in the way any particular file is maintained, such as the type of metadata which can be associated with a file, or allowing an open operation on one file to result in different functionality than an open operation on another file. This is at least partially because the manipulation of files within a file system is usually hardcoded as part of the file system, and implementing new types of files, or new functionality, requires the vendor of the file system to modify, debug and test the file system, which can be time consuming and expensive. Thus, users of conventional file systems have little or no flexibility in implementing new filetypes.
U.S. Pat. No. 5,504,892 discloses an extensible object-oriented file system, in an attempt to alleviate some of these problems. The file system disclosed in the '892 patent is implemented in an object-oriented programming language, and discloses various classes for use in such a system. While the framework disclosed in the '892 patent appears to provide a more modular approach to implementing new objects than provided in conventional file systems, primarily through the use of an object-oriented programming language, it does not appear to disclose a manner for implementing new objects without requiring the recompilation of the file system. Thus, although it may be easier for a vendor of such a file system to implement customer requested objects, it appears to still require the vendor of the file system to modify, debug and release a new version of the file system to implement a new object.
It is apparent that a storage system which allows the definition and creation of new objects which can interact with the existing storage system without recompilation of the storage system, and which can define not only their metadata, but also how they behave to standard storage system requests would be desirable.